package gerenciadorDeMemoria;

import src.escalonador.Processo;

public class MemoriaFisica {
	
	public static Frame[] frames = new Frame[Util.NFRAMES];
	public static int framesOcupados = 0;
	
	public boolean isFull(){
		if (framesOcupados == Util.NFRAMES){
			return true;
		}
		return false;
	}
	
	public int alocaFrame(Processo p, int pagina){
	    
	
		for (int i = 0; i < Util.NFRAMES; i++){
			if (frames[i] == null){
				frames[i] = new Frame();
				frames[i].setProcesso(p);
				framesOcupados++;
				frames[i].setPagina(pagina);
				return i;
			}
		}
		return 0;
	}
	
	
	public void setFramesOcupados(int fO) {
		framesOcupados = fO;
	}
	
	
	public int getFramesOcupados() {
		return framesOcupados;
	}
	
	public void modifyFrame(int i, Processo p, int pagina){
		frames[i].getProcesso().getTabelaDePaginas()[frames[i].getPagina()].setBitPresenteAusente(false);
		frames[i].getProcesso().getTabelaDePaginas()[frames[i].getPagina()].setBitModified(false);
		frames[i].getProcesso().getTabelaDePaginas()[frames[i].getPagina()].setBitRecently(false);
		frames[i].getProcesso().getTabelaDePaginas()[frames[i].getPagina()].setCountRecently(0);
		frames[i].setProcesso(p);
		frames[i].setPagina(pagina);
	}
	
	public static void atualizaTextoMemoria(){
		for (int i = 0; i < framesOcupados; i++){
			if (frames[i].getProcesso().getTabelaDePaginas()[frames[i].getPagina()].getCountRecently() > 4){
				frames[i].getProcesso().getTabelaDePaginas()[frames[i].getPagina()].setBitRecently(false);
			}
			GerenciadorMemoria.setTextTable(frames[i].getProcesso().getNomeProcesso(), i, 1);
			GerenciadorMemoria.setTextTable(frames[i].getPagina() + "", i, 2);
			GerenciadorMemoria.setTextTable(frames[i].getProcesso().getTabelaDePaginas()[frames[i].getPagina()].getBitModified() + "", i, 3);
			GerenciadorMemoria.setTextTable(frames[i].getProcesso().getTabelaDePaginas()[frames[i].getPagina()].getBitRecently() + "", i, 4);
		}
	}
	
//	public static void limpaMemoria(){
//		for (int i = 0; i < framesOcupados; i++){
//			GerenciadorMemoria.setTextTable("", i, 1);
//			GerenciadorMemoria.setTextTable( "", i, 2);
//			frames[i].setProcesso(null);
//			frames[i].setPagina(0);
//		}
//	}
}
